package com.xiaoq.order.repository;

import com.xiaoq.order.entity.OrderTourPipe;
import com.xiaoq.order.entity.ShopOrderEntity;
import com.xiaoq.order.vo.OrderQueryVo;
import com.xiaoq.order.vo.OrderTourPipeQueryVo;
import com.xiaoq.vo.PagingVo;

import java.util.List;
import java.util.Map;

/**
 * Created by chenjh on 2017/11/7.
 */
public interface IShopOrderRepository {

    void save(ShopOrderEntity shopOrderEntity);

    /**
     * 根据用户Id和订单Id 获取具体的订单信息
     * @param shopOrderId
     * @param userId
     * @return
     */
    ShopOrderEntity getShopOrder(String shopOrderId, String userId);

    /**
     * 根据orderId 获取订单信息
     * @param orderId
     * @return
     */
    ShopOrderEntity getShopOrder(String orderId);

    /**
     * 取消用户订单
     * @param shopOrderId
     * @param userId
     * @return
     */
    boolean cancelShopOrder(String shopOrderId, String userId);

    /**
     * 查询用户的所有订单
     * @param shopOrderEntity （userId 不能为空）
     * @return
     */
    List<ShopOrderEntity> getUserAllOrder(ShopOrderEntity shopOrderEntity);

    /**
     *  根据讲解员ID得到所有的订单信息
     * @param interpreterId 讲解员ID
     * @return
     */
    List<ShopOrderEntity> getInterpreterAllOrder(String interpreterId);

    /**
     * 更新shopOrderEntity 信息
     * @param shopOrderEntity
     * @return
     */
    boolean updateByOrderId(ShopOrderEntity shopOrderEntity);

    /**
     *  更新订单评论的状态
     * @param userId 用户ID
     * @param orderId 订单ID
     * @param skuCode skuCode
     * @param reviewState 评论的状态
     * @param orderState 设置订单的状态（后期可能有不同的订单类型，不同的状态值）
     * @return
     */
    int updateReviewStateInOrder(String userId, String orderId, String skuCode, int reviewState, int orderState);

    /**
     *  将订单状态的评论状态置为 待评论
     * @param userId
     * @param shopOrderId
     * @param skuCode
     * @param orderState 订单的状态（后期订单类型不一样，代表的值不一样）
     */
    void callBackReviewState(String userId, String shopOrderId, String skuCode, int orderState);

    /**
     * 根据userId和orderId 删除订单 (逻辑删除)
     * @param shopOrderEntity 用户ID
     * @return
     */
    boolean deleteOrder(ShopOrderEntity shopOrderEntity);

    /**
     * 得到待付款,过期的所有订单
     * @param shopId 可为null, 店
     * @param orderType 可为null, 订单类型
     * @return
     */
    List<ShopOrderEntity> getNotPayExpiredShopOrderList(String shopId, Integer orderType);

    /**
     * 得到讲解员的所有状态
     * @param interpreterId 讲解员ID
     * @param orderState 订单状态
     * @param payState 支付状态
     * @return
     */
    List<ShopOrderEntity> getInterpreterAllOrder(String interpreterId, Integer orderState, Integer payState);

    /**
     * 后台查询用：
     *  得到店的所有订单
     * @param orderQueryVo
     * @param pagingVo
     * @return
     */
    List<ShopOrderEntity> getShopAllOrders(OrderQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     * 后台查询用：
     *  得到店的所有订单数量
     * @param orderQueryVo
     * @param pagingVo
     * @return
     */
    long getShopAllOrdersCount(OrderQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     * @param shopId 店
     * @param couponCodeList 优惠券 couponInstanceCode
     * @return
     */
    List<ShopOrderEntity> getShopOrderList(String shopId, List<String> couponCodeList);

    /**
     * 游客一览查询接口
     * @param orderQueryVo 查询Vo
     * @param pagingVo
     * @return
     */
    List<OrderTourPipe> getShopAllOrders4Tour(OrderTourPipeQueryVo orderQueryVo, PagingVo pagingVo);

    /**
     *  游客一览查询接口,总条数
     * @param orderQueryVo 查询vo
     * @return
     */
    long getShopAllOrders4TourCount(OrderTourPipeQueryVo orderQueryVo);



    /**
     * 定时任务用于更新下单人来自哪里
     *  得到用户已付款, userFrom 不存在的订单,
     * @param limit 返回的数量
     * @return
     */
    List<ShopOrderEntity> getPaidNotUserFromOrders(Integer limit);


}
